package com.lywz.biz.common.dao.impl;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import com.lywz.biz.common.dao.AbstractBaseDao;
import com.lywz.biz.common.dao.CommonDao;

/**
 * 通用DAO实现 主要包括通用的删除，插入，更新，更新或者删除（不推荐）。
 * 
 * @author Lionel pang
 * @date 2010-3-18
 * 
 * @update (insert: queryById, queryByPage)
 * @author yangbl
 * @date 2010-4-19
 */
@Repository("commonDao")
public class CommonDefaultDao extends AbstractBaseDao implements CommonDao {

    @Override
    public <T> void delete(T obj) throws Exception {
        getHibernateTemplate().delete(obj);
    }

    @Override
    public <T> void insert(T obj) throws Exception {
        try {
            getHibernateTemplate().save(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public <T> void update(T obj) throws Exception {
        //		session().update(obj);
        getHibernateTemplate().update(obj);
    }

    @Override
    public <T> void saveOrUpdate(T obj) throws Exception {
        getHibernateTemplate().saveOrUpdate(obj);
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T, I extends Serializable> T queryById(Class<T> clazz, I id) throws Exception {
        return (T) getHibernateTemplate().get(clazz, id);
    }

    @SuppressWarnings("unchecked")
    @Override
    public <T> List<T> queryByPage(String hql, int firstResult, int num) throws Exception {
        Query query = session().createQuery(hql);
        query.setFirstResult(firstResult);
        query.setMaxResults(num);
        return (List<T>) query.list();
    }
}
